import apiClient from "@/lib/interceptor";

// API 响应接口
interface ApiResponse<T> {
  code: number;
  msg: string;
  data: T;
}

// 岗位信息接口
export interface Position {
  positionId: number;      // 岗位id
  positionNumber: string;  // 岗位编号
  positionName: string;    // 岗位名称
  positionProperties: string; // 岗位性质
  jobDescription: string;  // 岗位介绍
  person: number;         // 在岗人数
  deptType: number;       // 所属部门类型: 1职能部门 2二级学院 3其它部门
  deptId: number;         // 所属部门id
}

// 二级学院请求参数接口
export interface AcademyDTO {
  academyName: string;      // 二级学院名称
  academyManagerId: string; // 二级学院主任工号
  academyProfile: string;   // 二级学院简介
  academyNumber: string;    // 二级学院编号
  academyParentId: number;  // 上级二级学院id
  academyLevel: number;     // 二级学院级别
}

// 二级学院返回数据接口
export interface Academy {
  academyId: number;        // 二级学院id
  academyNumber: string;    // 二级学院编号
  academyParentId: number;  // 上级二级学院id
  academyName: string;      // 二级学院名称
  academyManagerId: string; // 二级学院主任工号
  academyProfile: string;   // 二级学院简介
  academyLevel: number;     // 二级学院级别
  createTime: string;       // 创建时间
  updateTime: string;       // 更新时间
  positions: Position[];    // 岗位列表
}

/**
 * 新增二级学院
 * @param academyData 二级学院信息
 * @returns Promise<void>
 */
export const createAcademy = async (academyData: AcademyDTO): Promise<void> => {
  try {
    // 数据预处理
    const processedData = {
      ...academyData,
      academyLevel: Number(academyData.academyLevel),
      academyParentId: Number(academyData.academyParentId)
    };

    console.log('新增二级学院请求数据:', processedData);

    // 发送请求
    const response = await apiClient.post<ApiResponse<any>>('/department/academy', processedData);
    console.log('新增二级学院响应:', response.data);
    
    // 只检查响应状态码
    if (response.data.code !== 1) {
      throw new Error(response.data.msg || '创建失败');
    }
  } catch (error: any) {
    console.error('新增二级学院失败:', error);
    // 统一错误处理
    if (error.response?.data?.msg) {
      throw new Error(error.response.data.msg);
    }
    throw error;
  }
};

/**
 * 获取学院列表
 * @param academyId 可选的学院ID参数
 * @returns Promise<Academy[]>
 */
export const getAcademyList = async (academyId?: number): Promise<Academy[]> => {
  try {
    const params = academyId ? { academyId } : undefined;
    const response = await apiClient.get<ApiResponse<Academy[]>>('/department/academy', { params });
    
    if (response.data.code === 1 && response.data.data) {
      // 直接返回原始数据，保留positions数组
      return response.data.data;
    } else {
      throw new Error(response.data.msg || '获取学院列表失败');
    }
  } catch (error: any) {
    console.error('获取学院列表失败:', error);
    throw error;
  }
};

/**
 * 更新二级学院
 * @param academyData 更新的学院信息
 * @returns Promise<void>
 */
export const updateAcademy = async (academyData: Partial<Academy> & { academyId: number }): Promise<void> => {
  try {
    // 数据预处理
    const processedData = {
      ...academyData,
      academyLevel: academyData.academyLevel ? Number(academyData.academyLevel) : undefined,
      academyParentId: academyData.academyParentId === 0 ? 0 : Number(academyData.academyParentId),
      updateTime: new Date().toISOString()
    };

    console.log('更新二级学院请求数据:', processedData);

    // 发送请求
    const response = await apiClient.patch<ApiResponse<null>>('/department/academy', processedData);
    console.log('更新二级学院响应:', response.data);

    // 检查响应状态
    if (response.data.code !== 1) {
      throw new Error(response.data.msg || '更新失败');
    }
  } catch (error: any) {
    console.error('更新二级学院失败:', error);
    if (error.response?.data?.msg) {
      throw new Error(error.response.data.msg);
    }
    throw error;
  }
};

/**
 * 删除二级学院
 * @param academyIds 要删除的学院ID数组
 * @returns Promise<void>
 */
export const deleteAcademy = async (academyIds: number[]): Promise<void> => {
  try {
    console.log('删除二级学院请求数据:', academyIds);

    // 发送请求
    const response = await apiClient.delete<ApiResponse<null>>(`/department/academy/${academyIds.join(',')}`);
    console.log('删除二级学院响应:', response.data);

    // 检查响应状态
    if (response.data.code !== 1) {
      throw new Error(response.data.msg || '删除失败');
    }
  } catch (error: any) {
    console.error('删除二级学院失败:', error);
    if (error.response?.data?.msg) {
      throw new Error(error.response.data.msg);
    }
    throw error;
  }
};

export const getAcademies = () => {
  return apiClient.get('/department/academy');
};
